C++ int、long、long int、long long、uint64 您所在的位置:网站首页 占用4个字节的类型是 整型长整型字节型 货币型 C++ int、long、long int、long long、uint64

C++ int、long、long int、long long、uint64

2024-06-30 07:08| 来源: 网络整理| 查看: 265

前言

我们在进行编程时,对于int、long、long long经常使用,但是对于这些类型占用的字节长度可能不会太确定,尤其是在32位平台、64位平台,会有差异,这些知识点为基础知识,容易忽略的基础知识,本文做下分析记录。

不同平台整型字节长度区别 平台/类型charshortintlonglong long16位1224832位1244864位12488

int和short  int

int占用1个机器字长,在32位系统中int占32位,即4个字节,而在16位系统中,int占16位,即2个字节,在c++标准中只限制规定short int不能超过int的长度,具体长度可以由编译器的实现厂商决定,所以目前32位编译器中, short int占2个字节,int 占4个字节,short int可以简写为short。类似的,c++标准只限制了long int不得小于int的长度,具体长度也没有作出限制。

long 和 long int

我们会看到long 和 long int,其实这两者对于编译器来说时一样的,我们在使用long时,其实已经默认包括了int,同样long long = long long int。 即long是long int的简写,同样的道理 long long是long long int的简写。

int64_t 和 uint64_t

int64_t 和 uint64_t 这两种类型并不是标准的c定义的类型,而是通过typedef重命名的类型,定义在 stdint.h 中:

# if __WORDSIZE == 64 typedef long int int64_t; # else __extension__ typedef long long int int64_t; # endif #if __WORDSIZE == 64 typedef unsigned long int uint64_t; #else __extension__ typedef unsigned long long int uint64_t; #endif

从上面的代码也可以看到,如果编译器是64位平台,则uint64_t 其实时unsigned long int,而long int是占用8个字节的。反之,如果编译器是32平台,则uint64_t 是unsigned long long int,也是占用8个字节。

验证

程序如下

#include #include #include int main(void) { printf("the os is 64 bit.\n"); printf("__WORDSIZE:%d \n", __WORDSIZE); printf("char bytes:%d\n", sizeof(char)); printf("short bytes:%d\n", sizeof(short)); printf("int bytes:%d\n", sizeof(int)); printf("float bytes:%d\n", sizeof(float)); printf("long bytes:%d\n", sizeof(long)); printf("long int bytes:%d\n", sizeof(long int)); printf("long long bytes:%d\n", sizeof(long long)); printf("long long int bytes:%d\n", sizeof(long long int)); printf("uint64_t bytes:%d\n", sizeof(uint64_t)); printf("uint32_t bytes:%d\n", sizeof(uint32_t)); printf("size_t bytes:%d\n", sizeof(size_t)); return 0; }

执行结果如下:

the os is 64 bit. __WORDSIZE:64 char bytes:1 short bytes:2 int bytes:4 float bytes:4 long bytes:8 long int bytes:8 long long bytes:8 long long int bytes:8 uint64_t bytes:8 uint32_t bytes:4 size_t bytes:8 初学时候看的文章都是说根据cpu和编译器位数来区分

 但是经过实际测试发现有点问题,使用intel 64位处理器,64位操作系统,vs2017编译器为64位,对int,long,long long三种类型大小进行测试

#include #include #include #include using namespace std; int main() { int *p; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有